//矩阵转置（列表递增法/逐行复制法）
#include<stdio.h>
#define MaxTerm 100
#define ElemType int

typedef struct Triple
{
    int x,y;     //x是列  y是行
    ElemType e;
}Triple;

typedef struct 
{
    Triple data[MaxTerm];
    int row,col,num;  //row行 col列 num非零元素个数
}TSMatrix,*TSMatrixptr;

void Transpose(TSMatrix A,TSMatrix *B)
{
    B->num=A.num;
    B->col=A.row;
    B->row=A.col;
    if(B->num==0)
    {
        printf("Error:三元组为空");
        return ;
    }
    int pos=0;   //Triple data初始储存位置；
    for(int i=0;i<A.col;i++)   //按列遍历  //x是列  y是行
    {
        for(int j=0;j<A.num;j++)  
        {
            if(A.data[j].x==i)
            {
                B->data[pos].y=A.data[j].x;
                B->data[pos].x=A.data[j].y;
                B->data[pos].e=A.data[j].e;
                pos++;
            }
        }
    }
}

int main()
{
    TSMatrix A;
    printf("请输入非零元素的个数：");
    scanf("%d",&A.num);
    printf("请输入稀疏矩阵的行数：");
    scanf("%d",&A.row);
    printf("请输入稀疏矩阵的列数：");
    scanf("%d",&A.col);
    printf("请依次输入非零元素的行 列 值：\n");
    for(int i=0;i<A.num;i++)
    {
        scanf("%d %d %d",&A.data[i].y,&A.data[i].x,&A.data[i].e);
    }
    TSMatrix B;
    Transpose(A,&B);
    printf("转置后三元组的长度：%d\n",B.num);
    printf("转置后稀疏矩阵的行数：%d\n",B.row);
    printf("转置后稀疏矩阵的列数：%d\n",B.col);
    printf("转置后三元组的数据 行 列 值：\n");
    for(int i=0;i<B.num;i++)
    {
        printf("%d %d %d\n",B.data[i].y,B.data[i].x,B.data[i].e);
    }
}